home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Auge 4000 / Auge 4000 #17 (1988-04-01)(Amiga User Gruppe Einzugsgebiet 4000).zip / Auge 4000 #17 (1988-04-01)(Amiga User Gruppe Einzugsgebiet 4000).adf / DrunkenMouse / vblank.c < prev    next >
C/C++ Source or Header  |  1996-12-24  |  1KB  |  78 lines

  1. /* vblank.c */
  2. /* by Alex Livshits */
  3. /* July 1987 */
  4.  
  5. #include <exec/types.h>
  6. #include <exec/devices.h>
  7. #include <exec/memory.h>
  8. #include <exec/interrupts.h>
  9. #include <hardware/intbits.h>
  10.  
  11. #define VBINTER     0x00000001
  12. #define SIGNAL      0x00000002
  13.  
  14.  
  15. /* =======  EXPORT ======== */
  16. int vblank_start(), vblank_end();
  17. ULONG VBEVENT;
  18. /***/
  19.  
  20. static int signal;
  21. static APTR MyTask;
  22. static struct Interrupt *VBinter;
  23. static int mask;
  24.  
  25.  
  26. int
  27. vbinter()
  28. {
  29.    Signal(MyTask,VBEVENT);
  30.    return(0);
  31. }
  32.  
  33.  
  34. int
  35. vblank_start()
  36. {
  37.    mask=0;
  38.  
  39.    signal = AllocSignal(-1);
  40.    if (signal==-1) {
  41.       vblank_end();
  42.       return(30);
  43.    }
  44.    mask |= SIGNAL;
  45.    VBEVENT = 1L<<signal;
  46.    MyTask = (APTR)FindTask(0);
  47.  
  48.    VBinter = AllocMem(sizeof(*VBinter),MEMF_PUBLIC|MEMF_CLEAR);
  49.    if (!VBinter) {
  50.       vblank_end();
  51.       return(40);
  52.    }
  53.  
  54.    VBinter->is_Node.ln_Type=NT_INTERRUPT;
  55.    VBinter->is_Node.ln_Pri=-60;
  56.    VBinter->is_Node.ln_Name = "";
  57.    VBinter->is_Data=0;
  58.    VBinter->is_Code=vbinter;
  59.  
  60.    AddIntServer(INTB_VERTB,VBinter);
  61.    mask |= VBINTER;
  62.    return(0);
  63. }
  64.  
  65. int
  66. vblank_end()
  67. {
  68.     if (mask & VBINTER) {
  69.          RemIntServer(INTB_PORTS,VBinter);
  70.          FreeMem(VBinter,sizeof(*VBinter));
  71.     }
  72.     if (mask & SIGNAL) FreeSignal(signal);
  73.     return(0);
  74. }
  75.  
  76.  
  77.  
  78.